package com.kkb.kkbportal.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kkb.kkbcommon.api.ResultCode;
import com.kkb.kkbcommon.exception.Asserts;
import com.kkb.kkbportal.dao.ProductionInfoDao;
import com.kkb.kkbportal.domain.ProductionInfo;
import com.kkb.kkbportal.domain.vo.DetailProductionVo;
import com.kkb.kkbportal.service.ProductionInfoService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @ClassName ProductionInfoServiceImpl
 * @Description 作品集
 * @Author hxf
 * @Date 2021/8/14
 **/
@Service
public class ProductionInfoServiceImpl extends ServiceImpl<ProductionInfoDao, ProductionInfo> implements ProductionInfoService {
    /**
     * 作品集上传
     *
     * @param productionInfo
     */
    @Override
    public void insert(ProductionInfo productionInfo) {
        int insert = baseMapper.insert(productionInfo);
        if (insert == 0) {
            Asserts.fail(ResultCode.FAILED);
        }
    }

    /**
     * 根据id查询作品集
     *
     * @param id 作品集id
     * @return 作品集对象
     */
    @Override
    public ProductionInfo selectById(Long id) {
        ProductionInfo productionInfo = baseMapper.selectById(id);
        if (ObjectUtil.isNull(productionInfo)) {
            Asserts.fail(ResultCode.FAILED);
        }
        return productionInfo;
    }


    /**
     * 作品集展示
     *
     * @param condition 查询条件
     * @return
     */
    @Override
    public List<ProductionInfo> findPage(ProductionInfo condition) {
        List<ProductionInfo> list = null;
        if (ObjectUtil.isNull(condition)) {
            list = baseMapper.selectList(Wrappers.query());
        }
        list = lambdaQuery()
                .eq(ProductionInfo::getProjectType, condition.getProjectType()).list();
        return list;
    }

    /**
     * 删除作品集
     *
     * @param id 作品集id
     */
    @Override
    public void delete(Long id) {
        int i = baseMapper.deleteById(id);
        if (i == 0) {
            Asserts.fail(ResultCode.FAILED);
        }
    }

    /**
     * 更新作品集
     *
     * @param productionInfo 作品集对象
     */
    @Override
    public void update(ProductionInfo productionInfo) {
        LambdaUpdateWrapper<ProductionInfo> wrapper = new LambdaUpdateWrapper<ProductionInfo>().eq(ProductionInfo::getId, productionInfo.getId());
        int update = baseMapper.update(productionInfo, wrapper);
        if (update == 0) {
            Asserts.fail(ResultCode.FAILED);
        }
    }

    /**
     * 根据导师/学员id，展示作品集详情列表
     *
     * @param id 导师/学员id
     * @return 作品集列表
     * @author syt group-1
     */
    @Override
    public List<DetailProductionVo> selectProductionListById(Long id) {
        List<DetailProductionVo> detailProductionVos = null;
        List<ProductionInfo> productionInfos = this.lambdaQuery()
                .eq(ProductionInfo::getUserId, id)
                .list();
        for (ProductionInfo productionInfo : productionInfos) {
            DetailProductionVo detailProductionVo = new DetailProductionVo();
            detailProductionVo.setId(productionInfo.getId());
            // a. Todo: 查询作品封面
            detailProductionVo.setImg("123");
            // b. 作品标题
            detailProductionVo.setTitle(productionInfo.getProjectTitle());
            // c. Todo：查询点赞数
            detailProductionVo.setLikeCount(123);
            // 将Vo对象存入List
            detailProductionVos.add(detailProductionVo);
        }

        return detailProductionVos;
    }
}
